// ignore_for_file: unnecessary_getters_setters, use_string_in_part_of_directives

part of excel;

///表示数据有效性的规则
class DataValidation {
  final DataValidationType type; // 数据有效性类型，例如 "list"
  final String formula1; // 公式或列表范围
  final String sqref; // 约束单元格范围
  final String? formula2; // 公式或列表范围
  final bool allowBlank; // 是否允许空值
  final bool showInputMessage; // 是否显示输入信息
  final bool showErrorMessage; // 是否显示错误信息
  final String? errorTitle; // 错误标题
  final String? error; // 错误信息

  DataValidation({
    required this.type,
    required this.formula1,
    required this.sqref,
    this.allowBlank = true,
    this.formula2,
    this.showInputMessage = true,
    this.showErrorMessage = false,
    this.errorTitle,
    this.error,
  });

  String toXml() {
    return '''
      <dataValidation type="${type.value}" allowBlank="${allowBlank ? 1 : 0}" showInputMessage="${showInputMessage ? 1 : 0}"  showErrorMessage="${showErrorMessage ? 1 : 0}" sqref="$sqref">
        <formula1>$formula1</formula1>
      </dataValidation>
    ''';
  }
}

///数据有效性类型
enum DataValidationType {
  list, // 下拉列表
  wholeNumber, // 整数
  decimal, // 小数
  date, // 日期
  time, // 时间
  textLength, // 文本长度
  custom, // 自定义公式
}

///通过extension为每个枚举值提供对应的字符串值（如 list），方便在生成XML时使用。
extension DataValidationTypeExtension on DataValidationType {
  String get value {
    switch (this) {
      case DataValidationType.list:
        return 'list';
      case DataValidationType.wholeNumber:
        return 'whole';
      case DataValidationType.decimal:
        return 'decimal';
      case DataValidationType.date:
        return 'date';
      case DataValidationType.time:
        return 'time';
      case DataValidationType.textLength:
        return 'textLength';
      case DataValidationType.custom:
        return 'custom';
    }
  }
}
